IDBObjectStore

IndexedDB APIIDBObjectStore インターフェイスは、データベース内のオブジェクトストアを表します。オブジェクトストア内のレコードは、キーによってソートされています。ソートしておくことで、高速な挿入、検索、そして順番での取り出しを可能にします。

メモ: この機能はウェブワーカー内で利用可能です。

インスタンスプロパティ

IDBObjectStore.indexNames 読取専用

このオブジェクトストア内のオブジェクトのインデックスの名前のリストです。

IDBObjectStore.keyPath 読取専用

このオブジェクトストアのキーパスです。この属性が null のときは、アプリケーションはそれぞれの更新操作のためにキーを提供しなければなりません。

IDBObjectStore.name

このオブジェクトストアの名前です。

IDBObjectStore.transaction 読取専用

このオブジェクトストアが属している IDBTransaction オブジェクトです。

IDBObjectStore.autoIncrement 読取専用

このオブジェクトストアのオートインクリメントフラグの値です。

インスタンスメソッド

IDBObjectStore.add()

IDBRequest オブジェクトを返し、別のスレッドで value構造化複製を生成し、複製した値をオブジェクトストアに保存します。これはオブジェクトストアに新しいレコードを追加する操作です。

IDBObjectStore.clear()

IDBRequest オブジェクトを生成してすぐに返し、別のスレッドでこのオブジェクトストアをクリアします。これはオブジェクトストア内に現在ある全レコードを削除する操作です。

IDBObjectStore.count()

IDBRequest オブジェクトを返し、別のスレッドで指定のキーまたは IDBKeyRange にマッチするレコードの数を返します。引数なしで呼ばれた場合は、ストア内の全レコードの数を返します。

IDBObjectStore.createIndex()

バージョンの更新中に新しいインデックスを作成し、接続中のデータベースにおける新しい IDBIndex を返します。

IDBObjectStore.delete()

IDBRequest オブジェクトを返し、指定したキーによって選択されたストア内のオブジェクトを別のスレッドで削除します。これはオブジェクトストアから個別のレコードを削除する操作です。

IDBObjectStore.deleteIndex()

バージョンの更新中に用い、接続中のデータベースから指定したインデックスを削除します。

IDBObjectStore.get()

IDBRequest オブジェクトを返し、指定したキーによって選択されたストア内のオブジェクトを別のスレッドで返します。これはオブジェクトストアから特定のレコードを取り出す操作です。

IDBObjectStore.getKey()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内のオブジェクトのレコードキーを別のスレッドで取得して返します。

IDBObjectStore.getAll()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内のオブジェクトを全て取得します。引数なしで呼ばれた場合は、ストア内の全てのオブジェクトを取得します。

IDBObjectStore.getAllKeys()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内の全てのオブジェクトのレコードキーを取得します。引数なしで呼ばれた場合は、ストア内の全てのオブジェクトについて取得します。

IDBObjectStore.index()

このオブジェクトストアでインデックスを開きます。これは、たとえば、カーソルを用いてこのインデックスでソートされたレコードの列を得るのに用いることができます。

IDBObjectStore.openCursor()

IDBRequest オブジェクトを返し、別のスレッドで新しい IDBCursorWithValue オブジェクトを返します。これはカーソルを用いて主キーでオブジェクトストアを走査するのに用います。

IDBObjectStore.openKeyCursor()

IDBRequest オブジェクトを返し、別のスレッドで新しい IDBCursor を返します。これはキーでオブジェクトストアを走査するのに用います。

IDBObjectStore.put()

IDBRequest オブジェクトを返し、別のスレッドで value構造化複製を作成し、複製した値をオブジェクトストアに保存します。これはトランザクションのモードが readwrite のときに既存のレコードを更新する操作です。

この例では、onupgradeneeded 関数内での IDBObjectStore.createIndex を用いたデータ構造の更新から、IDBObjectStore.add によるオブジェクトストアへのアイテムの追加まで、オブジェクトストアの様々な使用法を紹介します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
// 我々のデータベースを開きましょう
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を db に格納します
  db = DBOpenRequest.result;
};

// このイベントは、データベースがまだ作成されていないか、
// 上の window.indexedDB.open の行で新しいバージョン番号が
// 指定されたかで、新しいバージョンのデータベースを作成する
// 必要がある場合を処理します
DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML +=
      "<li>データベースの読み込み中にエラーが発生しました。</li>";
  };

  // このデータベース用の objectStore を作ります

  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // objectStore に格納するデータアイテムを定義します

  objectStore.createIndex("hours", "hours", { unique: false });
  objectStore.createIndex("minutes", "minutes", { unique: false });
  objectStore.createIndex("day", "day", { unique: false });
  objectStore.createIndex("month", "month", { unique: false });
  objectStore.createIndex("year", "year", { unique: false });

  objectStore.createIndex("notified", "notified", { unique: false });

  note.innerHTML += "<li>オブジェクトストアを作成しました。</li>";
};

// オブジェクトストアに追加する新しいアイテムを作成します
const newItem = [
  {
    taskTitle: "Walk dog",
    hours: 19,
    minutes: 30,
    day: 24,
    month: "December",
    year: 2013,
    notified: "no",
  },
];

// 読み書き用のトランザクションを開き、データを追加する準備をします
const transaction = db.transaction(["toDoList"], "readwrite");

// 全て完了した時、トランザクションの正常終了を報告します
transaction.oncomplete = (event) => {
  note.innerHTML += "<li>トランザクションが完了しました。</li>";
};

transaction.onerror = (event) => {
  note.innerHTML +=
    "<li>トランザクションはエラーのため開けませんでした。アイテムの重複は許可されていません。</li>";
};

// トランザクションでオブジェクトストアを作成します
const objectStore = transaction.objectStore("toDoList");
// オブジェクトストアに newItem オブジェクトを追加する要求をします
const objectStoreRequest = objectStore.add(newItem[0]);

objectStoreRequest.onsuccess = (event) => {
  note.innerHTML += "<li>要求は成功しました。</li>";
};

仕様書

Specification
Indexed Database API 3.0
# object-store-interface

ブラウザーの互換性

BCD tables only load in the browser

関連情報